iT邦幫忙

2024 iThome 鐵人賽

DAY 25
0
Security

從0開始的打Pwn教學系列 第 25

【Day-25】Stack 保護機制

  • 分享至 

  • xImage
  •  

我們上一篇把基本的Reverse題目講完了,接下來要講Stack buffer overflow的部分,但在進入之前,要先來說明應對Stack buffer overflow的攻擊保護,除了接下來的題目會出現以外,就算是有沒出現的之後遇到也可以看這些保護的機制,讓繞過保護有一個思考的方向。

先介紹檢查保護的工具checksec,apt就可以下載了。
https://ithelp.ithome.com.tw/upload/images/20241009/20169016VsSdiaI4bU.jpg

而它檢查保護機制也很簡單,checksec後加上--file選項後就可以看保護了(不過直接打檔名也可以)。
https://ithelp.ithome.com.tw/upload/images/20241009/20169016lGpLeIM0LG.jpg
https://ithelp.ithome.com.tw/upload/images/20241009/20169016GqVczEnr5p.jpg

說真的,相較起以前,現在的保護越來越多了,以後的Pwn只會越來越難打QQ…

ASLR (Address space layout randomization)
先來說ASLR,它會讓每一次程式啟動時Address都會不一樣,我們之前做的題型都可以很明確的知道我們要覆蓋的Return address是什麼值,就精準的覆蓋掉,讓RIP轉跳過去,但開啟了ASLR後如果要知道該轉跳到哪裡,就必須要做Information leak,leak出特定的Address,並推算出相對位置或是利用系統中固定不變的Address來計算出我們想要跳轉的目標位置等繞過手法。

RELRO (RELocation Read Only)
這個是為了防止GOT被修改,把GOT設定成只能讀不能寫的權限,程式在運作時,會利用動態鏈接來減少程式啟動的負擔和提高效率,而動態鏈接會先轉跳到PLT然後再轉跳到GOT,因此,如果可以覆蓋掉GOT,那PLT再跳到GOT時就會執行我們覆蓋掉的程式碼了。
這個時候可能就需要透過ROP、找到未被保護的GOT或是利用格式化字串漏洞等方式來繞過這個保護。

NX (No eXecute bit)
NX在Windows又被稱為DEP(Data Execution Prevention),簡單來說就是讓可以寫的不能夠被執行,而可以被執行的就不能夠被寫入,那繞過就是想辦法把可寫可執行的權限加入進去,比如透過mmap或是mprotect等方式。

PIE (Position independent executable)
PIE和ASLR很像,差異在於PIE是讓程式碼和記憶體的Address隨機化,而ASLR是將text、data、bss、heap、stack以及.so檔案等,在程式開始的位置加上一段隨機長度的空間,這些動作主要是為了防止ROP攻擊。

Canary
Canary就是在Old rbp之前加入一個Random值,如果這個Random值被修改了,那就會觸發Stack smashing Detected 程式會直接結束。
可以在Runtime時將Canary的值Leak出來,這樣在構造payload的時候就可以把Canary的值放在該有的位置上,或是程式是非線性的寫入,可以讓使用者從特定的地方開始寫,那就可能可以跳過Canary的保護,直接寫在Return address上。

除了上述的這些保護機制以外還有很多沒介紹到的保護機制,畢竟保護的機制只會越來越多,而這些也都有對應的繞過方式,但如果同時使用了好幾種保護機制,那入侵的難度會指數型成長。


上一篇
【Day-24】實戰 - Reverse
下一篇
【Day-26】Pwn 實戰 - 1
系列文
從0開始的打Pwn教學30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言